const fs = require('fs');
const path = require('path');

/**
 * 从 jdks.json 文件中提取所有唯一的操作系统类型和架构
 */
function extractUniqueOSAndArch() {
  try {
    // 读取 JSON 文件
    const jsonFilePath = path.join(__dirname, 'jdks.json');
    const jsonData = fs.readFileSync(jsonFilePath, 'utf8');

    // 解析 JSON 数据
    const data = JSON.parse(jsonData);

    // 使用 Set 来存储唯一的操作系统类型和架构
    const osSet = new Set();
    const archSet = new Set();
    const osArchSet = new Set();

    // 遍历所有 JDK 条目
    if (data.jdks && Array.isArray(data.jdks)) {
      data.jdks.forEach(jdk => {
        // 遍历每个 JDK 的 packages 数组
        if (jdk.packages && Array.isArray(jdk.packages)) {
          jdk.packages.forEach(pkg => {
            // 提取 os 和 arch 字段
            if (pkg.os) {
              osSet.add(pkg.os);
            }
            if (pkg.arch) {
              archSet.add(pkg.arch);
            }
            if (pkg.os && pkg.arch) {
              osArchSet.add(`${pkg.os}-${pkg.arch}`);
            }
          });
        }
      });
    }

    // 将 Set 转换为数组并排序输出
    const uniqueOS = Array.from(osSet).sort();
    const uniqueArch = Array.from(archSet).sort();
    const uniqueOSArch = Array.from(osArchSet).sort();

    console.log('从 jdks.json 文件中提取到的唯一操作系统类型：');
    uniqueOS.forEach(os => {
      console.log(`- ${os}`);
    });

    console.log(`\n从 jdks.json 文件中提取到的唯一架构类型：`);
    uniqueArch.forEach(arch => {
      console.log(`- ${arch}`);
    });

    console.log(`\n从 jdks.json 文件中提取到的唯一操作系统-架构组合：`);
    uniqueOSArch.forEach(osArch => {
      console.log(`- ${osArch}`);
    });

    console.log(`\n统计信息：`);
    console.log(`- 操作系统类型：${uniqueOS.length} 种`);
    console.log(`- 架构类型：${uniqueArch.length} 种`);
    console.log(`- 操作系统-架构组合：${uniqueOSArch.length} 种`);

    return { uniqueOS, uniqueArch, uniqueOSArch };

  } catch (error) {
    console.error('处理文件时发生错误：', error.message);
    process.exit(1);
  }
}

// 执行函数
extractUniqueOSAndArch();
